//constants/permissions.js
/**
 * 第一层：基础权限点常量定义
 * 职责：统一管理所有权限字符串，避免硬编码
 */
export const PERMISSION = {
    // 仪表盘权限
    DASHBOARD: {
        VIEW: 'dashboard:view',
        EXPORT: 'dashboard:export'
    },

    // 用户管理权限
    USER: {
        VIEW: 'user:view',
        CREATE: 'user:create',
        EDIT: 'user:edit',           // 通用编辑权限
        DELETE: 'user:delete',
        ASSIGN: 'user:assign',
        EXPORT: 'user:export'
    },

    // 角色管理权限
    ROLE: {
        VIEW: 'role:view',
        CREATE: 'role:create',
        EDIT: 'role:edit',
        DELETE: 'role:delete',
        ASSIGN: 'role:assign'
    },

    // 个人设置权限
    PERSONAL: {
        VIEW: 'personal:view',
        EDIT: 'personal:edit'
    }
};

/**
 * 动态生成所有权限点列表 / 获取可分配的权限点列表
 * @returns {Array} 所有具体权限点数组
 */
export function generateAllPermissions() {
    const permissions = [];
    
    function traverse(obj) {
        for (const key in obj) {
            if (typeof obj[key] === 'string') {
                permissions.push(obj[key]);
            } else if (typeof obj[key] === 'object') {
                traverse(obj[key]);
            }
        }
    }
    
    traverse(PERMISSION);
    return permissions;
}

/**
 * 第二层：角色权限组配置
 * 职责：定义每个角色拥有的具体权限点集合
 */
export const ROLE_PERMISSIONS = {
    SUPER_ADMIN: ['*'], // 通配符，拥有所有权限

    ADMIN: [
        // 仪表盘权限
        PERMISSION.DASHBOARD.VIEW,
        PERMISSION.DASHBOARD.EXPORT,

        // 用户管理权限
        PERMISSION.USER.VIEW,
        PERMISSION.USER.CREATE,
        PERMISSION.USER.EDIT,
        PERMISSION.USER.ASSIGN,
        PERMISSION.USER.EXPORT,

        // 角色管理权限（只读）
        PERMISSION.ROLE.VIEW,

        // 个人设置
        PERMISSION.PERSONAL.VIEW,
        PERMISSION.PERSONAL.EDIT
    ],

    USER: [
        // 仪表盘权限
        PERMISSION.DASHBOARD.VIEW,

        // 个人设置
        PERMISSION.PERSONAL.VIEW,
        PERMISSION.PERSONAL.EDIT
    ]
};


/**
 * 第三层：菜单&路由权限配置
 * 职责：定义每个菜单/路由需要的角色组和主要权限点
 */
export const MENU_PERMISSIONS = {
    DASHBOARD: {// 仪表盘
        roles: ['SUPER_ADMIN', 'ADMIN', 'USER'],
        permission: PERMISSION.DASHBOARD.VIEW
    },

    USER_MANAGEMENT: {// 用户管理
        roles: ['SUPER_ADMIN', 'ADMIN'],
        permission: PERMISSION.USER.VIEW
    },

    ROLE_MANAGEMENT: {// 角色管理
        roles: ['SUPER_ADMIN'],
        permission: PERMISSION.ROLE.VIEW
    },

    PERSONAL_SETTINGS: {// 个人设置
        roles: ['SUPER_ADMIN', 'ADMIN', 'USER'],
        permission: PERMISSION.PERSONAL.VIEW
    }
};